Nonvolatile semiconductor memories use a variety of semiconductor memory cell designs. One type of memory cell is a "flash" memory cell that is electrically erasable and electrically programmable. Once programmed, flash memory cells retain their data until it is erased.
Data integrity is very important for many flash memory applications and other nonvolatile memory applications. For example, a flash memory may be used to store the start-up and/or basic input/output system (BIOS) routines that are executed when a computer system is reset or turned on.
If the BIOS or other start-up code is altered or corrupted in some manner, the computer system may not operate properly. It is, therefore, desirable to be able protect the BIOS and other system critical code from destructive viruses, inadvertent overwriting or other undesired alteration. Data integrity is also important for such code and data as device drivers, read only memory (ROM)-executable operating system code, and software application code, for example.
Some prior flash memory devices have protected boot code from being corrupted through use of a boot block architecture having a "lockable" boot block of memory. The boot block is programmed with a programming voltage applied to a particular pin on the device. Once programming has been completed and the programming voltage is removed, the boot block cannot be written to or erased, and thus is considered to be locked. System recovery code may be stored in a another lockable block on the memory in a similar manner. (System recovery code is provided such that a system may be recovered in the case of a catastrophic system error.)
A drawback of this approach is that if the boot code, for example, needs to be updated, it is not possible to reprogram the part because the block(s) that include the code are locked. Where the part can be reprogrammed, it is usually necessary to re-apply the programming voltage, typically 12 volts, to the same pin on the flash memory device to which the programming voltage was applied to program the part. In many cases, however, application of the programming voltage to this pin requires a user to open up the system that includes the flash memory to physically move a jumper on a system board. Requiring a system user to open up a system to enable re-programming of a flash memory is undesirable for many reasons including potential harm to other components in the system, voiding product warranties, etc.
For another approach, a flash memory is divided into symmetric blocks, each of which has an associated block lock bit formed of one or more flash memory cells. The blocks can each be locked by writing to the corresponding lock bit to prevent information stored in the blocks from being overwritten or erased. Locking the blocks makes the blocks operate as a read only memory (ROM).
For this approach, the locked blocks cannot be unlocked to provide for code updates, however, without applying the programming voltage of 12 volts to the block lock bits. Again, it may be necessary to physically move a jumper on a board to enable application of the programming voltage to unlock the block lock bits.
Further, in each of the above approaches, while system critical information is protected in locked blocks, updates to such information can be difficult. This difficulty can affect system ease of use and upgradeability. Also, it may be difficult to easily fix bugs in code stored in locked blocks.